import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Funnel

from Page.sql import search_average_all_courses

df = pd.DataFrame(search_average_all_courses(), columns=['所有课程绩点'])
# 删除所有包含零值的行
df.drop(df[df.eq(0).any(axis=1)].index, inplace=True)
# 将元组转换为 pandas Series
print(df)
# 定义范围
bins = [0, 1.0, 2.0, 3.0, 4.0, 5.0]
index = ['绩点 3.0~4.0', '绩点 2.0~3.0', '绩点 1.0~2.0', '绩点 > 4.0', '绩点 < 1.0']
# 使用pd.cut()函数将数据分成不同的范围，并将结果存储在新的列中
df['range'] = pd.cut(df['所有课程绩点'], bins)

# 使用value_counts()函数统计每个范围中的个数，并将结果转换为DataFrame
result = df['range'].value_counts().reset_index()

# 使用zip函数将两个列表组合，并将其转换为所需的格式
formatted_list = list(zip(index, result['range']))

print(formatted_list)

c = Funnel()
c.add(
    "所有课程绩点分布",
    formatted_list,
    # sort_="ascending",
    label_opts=opts.LabelOpts(position="inside"),
)
c.set_global_opts(title_opts=opts.TitleOpts(title="2020级计算机学院学生所有课程绩点分布"))
c.render("漏斗图.html")
